package com.wy.project.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wy.project.entity.*;
import com.wy.project.mapper.PdInfoReqsMapper;
import com.wy.project.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author Apollo
 * @since 2021-01-16
 */
@Service
public class PdInfoReqsService extends ServiceImpl<PdInfoReqsMapper, PdInfoReqs> implements IPdInfoReqsService {
    //需求模块信息
    @Resource
    IPdInfoReqsModuleService pdInfoReqsModuleService;
    //历史需求模块信息
    @Resource
    IHisPdInfoReqsModuleService hisPdInfoReqsModuleService;
    //功能需求信息
    @Resource
    IPdInfoReqsService pdInfoReqsService;
    //历史功能需求信息
    @Resource
    IHisPdInfoReqsService hisPdInfoReqsService;
    //产品基本信息
    @Resource
    IProductInfoService productInfoService;
    //审核信息
    @Resource
    IProductApprovalInfoService productApprovalInfoService;
    //历史审核信息
    @Resource
    IHisProductApprovalInfoService hisProductApprovalInfoService;
    //发送消息
    @Resource
    IProductMsgService productMsgService;


    /**
     * 将产品功能模块信息
     * 存为草稿(创建)
     *
     * @param productInfo 要创建的产品基本信息,包含业务流程信息
     */
    @Override
    public void save4Draft(ProductInfo productInfo) {
        //保存需求模块信息
        List<PdInfoReqsModule> pdInfoReqsModules = productInfo.getPdInfoReqsModules();
        for(PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModules){
            pdInfoReqsModule.setCreateTime(new Date());
            pdInfoReqsModule.setUpdateTime(new Date());
            pdInfoReqsModule.setIsDelete(2);
            pdInfoReqsModule.setProductInfoCode(productInfo.getCode());
        }
        pdInfoReqsModuleService.saveBatch(pdInfoReqsModules);
        for(PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModules){
            List<PdInfoReqs> pdInfoReqs = pdInfoReqsModule.getPdInfoReqs();
            for(PdInfoReqs pdInfoReqs1 : pdInfoReqs){
                pdInfoReqs1.setPdInfoReqsModuleCode(pdInfoReqsModule.getCode());
            }
            pdInfoReqsService.saveBatch(pdInfoReqs);
        }
        productInfo.setPdInfoReqsStatus(ProductInfo.Status.STATUS_DRAFT);
        productInfoService.updateById(productInfo);
    }

    /**
     * 将产品功能模块信息
     * 提交审核(创建)
     *
     * @param productInfo 要创建的产品基本信息,包含业务流程信息
     */
    @Override
    public void save4Approval(ProductInfo productInfo) {
        //保存需求模块信息
        List<PdInfoReqsModule> pdInfoReqsModules = productInfo.getPdInfoReqsModules();
        for(PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModules){
            pdInfoReqsModule.setCreateTime(new Date());
            pdInfoReqsModule.setUpdateTime(new Date());
            pdInfoReqsModule.setIsDelete(2);
            pdInfoReqsModule.setVersion(1);
            pdInfoReqsModule.setProductInfoCode(productInfo.getCode());
        }
        pdInfoReqsModuleService.saveBatch(pdInfoReqsModules);
        //保存功能需求信息
        for(PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModules){
            List<PdInfoReqs> pdInfoReqs = pdInfoReqsModule.getPdInfoReqs();
            for(PdInfoReqs pdInfoReqs1 : pdInfoReqs){
                pdInfoReqs1.setVersion(1);
                pdInfoReqs1.setPdInfoReqsModuleCode(pdInfoReqsModule.getCode());
            }
            pdInfoReqsService.saveBatch(pdInfoReqs);
        }
        //修改状态
        productInfo.setPdInfoReqsStatus(ProductInfo.Status.STATUS_WAIT_APPROVAL);
        productInfoService.updateById(productInfo);
        //保存历史功能模块信息
        ArrayList<HisPdInfoReqsModule> hisPdInfoReqsModules = new ArrayList<>();
        for(PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModules){
            HisPdInfoReqsModule hisPdInfoReqsModule = new HisPdInfoReqsModule();
            BeanUtils.copyProperties(pdInfoReqsModule,hisPdInfoReqsModule);
            hisPdInfoReqsModule.setHisProductInfoCode(productInfo.getCode());
            hisPdInfoReqsModules.add(hisPdInfoReqsModule);
        }
        hisPdInfoReqsModuleService.saveBatch(hisPdInfoReqsModules);
        //保存历史功能需求信息
        ArrayList<HisPdInfoReqs> hisPdInfoReqs = new ArrayList<>();
        for(PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModules){
            List<PdInfoReqs> pdInfoReqs = pdInfoReqsModule.getPdInfoReqs();
            for(PdInfoReqs pdInfoReqs1 : pdInfoReqs){
                HisPdInfoReqs hisPdInfoReqs1 = new HisPdInfoReqs();
                BeanUtils.copyProperties(pdInfoReqs1,hisPdInfoReqs1);
                hisPdInfoReqs1.setHisPdInfoReqsModuleCode(pdInfoReqsModule.getCode());
                hisPdInfoReqs1.setVersion(pdInfoReqsModule.getVersion());
                hisPdInfoReqs.add(hisPdInfoReqs1);
            }
            hisPdInfoReqsService.saveBatch(hisPdInfoReqs);
        }
        //3:发送消息
        ProductMsg productMsg = new ProductMsg();
        productMsg.setSendTime(new Date());//发送时间
        productMsg.setIsRead(2);//未读
        productMsg.setHandle(2);//未处理
        productMsg.setKind(3);//功能需求信息
        productMsg.setType(1);//待审核
        String title=productInfo.getName()+"的功能需求信息待审核";
        productMsg.setTitle(title);
        String content="领导您好,你有一份"+productInfo.getName()+"的功能需求需要审核,请您审核!";
        productMsg.setContent(content);
        productMsg.setHisProductInfoCode(productInfo.getCode());
        productMsgService.save(productMsg);
    }

    /**
     * 将产品功能模块信息
     * 存为草稿(修改) 先删除--再添加
     *
     * @param productInfo 要修改的产品基本信息,包含业务流程信息
     */
    @Override
    public void edit4Draft(ProductInfo productInfo) {
        //先删除原来的模块信息和功能需求信息
        QueryWrapper<PdInfoReqsModule> pdInfoReqsModuleQueryWrapper = new QueryWrapper<>();
        pdInfoReqsModuleQueryWrapper.lambda().eq(PdInfoReqsModule::getProductInfoCode,productInfo.getCode()).select(PdInfoReqsModule::getCode);
        List<PdInfoReqsModule> pdInfoReqsModuleList = pdInfoReqsModuleService.list(pdInfoReqsModuleQueryWrapper);
        //先删除模块下的功能需求
        ArrayList<String> pdInfoReqsModuleCodes = new ArrayList<>();//要删除的模块标识的集合
        for (PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModuleList){
            //先记录下来,等下批量删除
            pdInfoReqsModuleCodes.add(pdInfoReqsModule.getCode());
            //删除此模块下的功能
            QueryWrapper<PdInfoReqs> pdInfoReqsQueryWrapper = new QueryWrapper<>();
            pdInfoReqsQueryWrapper.lambda().eq(PdInfoReqs::getPdInfoReqsModuleCode,pdInfoReqsModule.getCode());
            //删除
            pdInfoReqsService.remove(pdInfoReqsQueryWrapper);
        }
        //删除模块
        pdInfoReqsModuleService.removeByIds(pdInfoReqsModuleCodes);

        //添加功能模块
        List<PdInfoReqsModule> pdInfoReqsModules = productInfo.getPdInfoReqsModules();
        for (PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModules){
            pdInfoReqsModule.setCreateTime(new Date());
            pdInfoReqsModule.setUpdateTime(new Date());
            pdInfoReqsModule.setIsDelete(2);
            pdInfoReqsModule.setProductInfoCode(productInfo.getCode());
        }
        pdInfoReqsModuleService.saveBatch(pdInfoReqsModules);
        //保存功能需求信息
        for(PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModules){
            List<PdInfoReqs> pdInfoReqs = pdInfoReqsModule.getPdInfoReqs();
            for(PdInfoReqs pdInfoReqs1 : pdInfoReqs){
                pdInfoReqs1.setPdInfoReqsModuleCode(pdInfoReqsModule.getCode());
            }
            pdInfoReqsService.saveBatch(pdInfoReqs);
        }
        //把产品基本信息的
        productInfo.setPdInfoReqsStatus(ProductInfo.Status.STATUS_DRAFT);
        productInfoService.updateById(productInfo);
    }




    /**
     * 将产品功能模块信息
     * 提交审核(修改)
     *
     * @param productInfo 要修改的产品基本信息,包含业务流程信息
     */
    @Override
    public void edit4Approval(ProductInfo productInfo) {
        QueryWrapper<PdInfoReqsModule> pdInfoReqsModuleQueryWrapper = new QueryWrapper<>();
        pdInfoReqsModuleQueryWrapper.lambda().eq(PdInfoReqsModule::getProductInfoCode,productInfo.getCode());
        List<PdInfoReqsModule> pdInfoReqsModuleList = pdInfoReqsModuleService.list(pdInfoReqsModuleQueryWrapper);
        ArrayList<String> pdInfoReqsModuleCodes = new ArrayList<>();
        for(PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModuleList){
            pdInfoReqsModuleCodes.add(pdInfoReqsModule.getCode());
            QueryWrapper<PdInfoReqs> pdInfoReqsQueryWrapper = new QueryWrapper<>();
            pdInfoReqsQueryWrapper.lambda().eq(PdInfoReqs::getPdInfoReqsModuleCode,pdInfoReqsModule.getCode());
            pdInfoReqsService.remove(pdInfoReqsQueryWrapper);
        }
        pdInfoReqsModuleService.removeByIds(pdInfoReqsModuleCodes);
        //保存功能模块信息
        List<PdInfoReqsModule> pdInfoReqsModules = productInfo.getPdInfoReqsModules();
        for(PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModules){
            pdInfoReqsModule.setCreateTime(new Date());
            pdInfoReqsModule.setUpdateTime(new Date());
            pdInfoReqsModule.setIsDelete(2);
            pdInfoReqsModule.setVersion(1);
            pdInfoReqsModule.setProductInfoCode(productInfo.getCode());
        }
        pdInfoReqsModuleService.saveBatch(pdInfoReqsModules);
        //保存功能需求信息
        for(PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModules){
            List<PdInfoReqs> pdInfoReqs = pdInfoReqsModule.getPdInfoReqs();
            for(PdInfoReqs pdInfoReqs1 : pdInfoReqs){
                pdInfoReqs1.setPdInfoReqsModuleCode(pdInfoReqsModule.getCode());
            }
            pdInfoReqsService.saveBatch(pdInfoReqs);
        }
        //保存历史功能模块信息
        ArrayList<HisPdInfoReqsModule> hisPdInfoReqsModules = new ArrayList<>();
        for(PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModules){

            HisPdInfoReqsModule hisPdInfoReqsModule = new HisPdInfoReqsModule();
            BeanUtils.copyProperties(pdInfoReqsModule,hisPdInfoReqsModule);
            hisPdInfoReqsModule.setHisProductInfoCode(productInfo.getCode());
            hisPdInfoReqsModules.add(hisPdInfoReqsModule);
        }
        hisPdInfoReqsModuleService.saveBatch(hisPdInfoReqsModules);
        //保存历史功能需求信息
        ArrayList<HisPdInfoReqs> hisPdInfoReqs = new ArrayList<>();
        for(PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModules){
            List<PdInfoReqs> pdInfoReqs = pdInfoReqsModule.getPdInfoReqs();
            for(PdInfoReqs pdInfoReqs1 : pdInfoReqs){
                HisPdInfoReqs hisPdInfoReqs1 = new HisPdInfoReqs();
                BeanUtils.copyProperties(pdInfoReqs1,hisPdInfoReqs1);
                hisPdInfoReqs1.setVersion(pdInfoReqsModule.getVersion());
                hisPdInfoReqs1.setHisPdInfoReqsModuleCode(pdInfoReqsModule.getCode());
                hisPdInfoReqs.add(hisPdInfoReqs1);
            }
            hisPdInfoReqsService.saveBatch(hisPdInfoReqs);
        }
        //3:发送消息
        ProductMsg productMsg = new ProductMsg();
        productMsg.setSendTime(new Date());//发送时间
        productMsg.setIsRead(2);//未读
        productMsg.setHandle(2);//未处理
        productMsg.setKind(3);//功能需求信息
        productMsg.setType(1);//待审核
        String title=productInfo.getName()+"的功能需求信息待审核";
        productMsg.setTitle(title);
        String content="领导您好,你有一份"+productInfo.getName()+"的功能需求需要审核,请您审核!";
        productMsg.setContent(content);
        productMsg.setHisProductInfoCode(productInfo.getCode());
        productMsgService.save(productMsg);
    }



    /**
     * 将产品功能模块信息
     * 审核通过
     *
     * @param productApprovalInfo 审核记录
     */
    @Override
    public void pass(ProductApprovalInfo productApprovalInfo) {
        productApprovalInfo.setCreateTime(new Date());
        productApprovalInfo.setUpdateTime(new Date());
        productApprovalInfo.setPass(1);
        productApprovalInfo.setType(ProductApprovalInfo.Constants.TYPE_REQS);//功能需求
        productApprovalInfoService.save(productApprovalInfo);
        QueryWrapper<ProductInfo> productInfoQueryWrapper = new QueryWrapper<>();
        productInfoQueryWrapper.lambda().eq(ProductInfo::getCode,productApprovalInfo.getProductInfoCode());
        ProductInfo productInfo = productInfoService.getOne(productInfoQueryWrapper);
        productInfo.setPdInfoReqsStatus(ProductInfo.Status.STATUS_APPROVAL_PASS);
        productInfoService.updateById(productInfo);
        //保存历史审核信息
        HisProductApprovalInfo hisProductApprovalInfo = new HisProductApprovalInfo();
        BeanUtils.copyProperties(productApprovalInfo,hisProductApprovalInfo);
        QueryWrapper<PdInfoReqsModule> pdInfoReqsModuleQueryWrapper = new QueryWrapper<>();
        pdInfoReqsModuleQueryWrapper.lambda().eq(PdInfoReqsModule::getProductInfoCode,productApprovalInfo.getProductInfoCode());
        List<PdInfoReqsModule> pdInfoReqsModuleList = pdInfoReqsModuleService.list(pdInfoReqsModuleQueryWrapper);
        for(PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModuleList){
            hisProductApprovalInfo.setVersion(pdInfoReqsModule.getVersion());
        }
        hisProductApprovalInfo.setHisProductInfoCode(productInfo.getCode());
        hisProductApprovalInfoService.save(hisProductApprovalInfo);
        //发送消息
        ProductMsg productMsg = new ProductMsg();
        productMsg.setSendTime(new Date());//发送时间
        productMsg.setIsRead(2);//未读
        productMsg.setHandle(2);//未处理
        productMsg.setKind(3);//功能需求信息
        productMsg.setType(2);//审核成功
        String title=productInfo.getName()+"的功能需求信息审核通过了";
        productMsg.setTitle(title);
        String content="您好,你的"+productInfo.getName()+"的功能需求需要审核通过了,请你查看!";
        productMsg.setContent(content);
        productMsg.setHisProductInfoCode(productInfo.getCode());
        productMsgService.save(productMsg);
        Integer status = productInfo.getStatus();
        Integer pdInfoReqsStatus = productInfo.getPdInfoReqsStatus();
        if(ProductInfo.Status.STATUS_APPROVAL_PASS==status && ProductInfo.Status.STATUS_APPROVAL_PASS==pdInfoReqsStatus){
            ProductMsg productMsg1 = new ProductMsg();
            productMsg1.setSendTime(new Date());//发送时间
            productMsg1.setIsRead(2);//未读
            productMsg1.setHandle(2);//未处理
            productMsg1.setKind(3);//功能需求信息
            productMsg.setType(5);//审核成功
            String title1=productInfo.getName()+"的产品待发布";
            productMsg.setTitle(title1);
            String content1="用户您好,你的"+productInfo.getName()+"全部审核通过,可以进行发布了";
            productMsg.setContent(content1);
            productMsg.setHisProductInfoCode(productInfo.getCode());
            productMsgService.save(productMsg1);
        }
    }

    /**
     * 将产品功能模块信息
     * 审核不通过
     *
     * @param productApprovalInfo 审核记录
     */
    @Override
    public void notPass(ProductApprovalInfo productApprovalInfo) {
        productApprovalInfo.setCreateTime(new Date());
        productApprovalInfo.setUpdateTime(new Date());
        productApprovalInfo.setPass(2);
        productApprovalInfo.setType(ProductApprovalInfo.Constants.TYPE_REQS);//功能需求
        productApprovalInfoService.save(productApprovalInfo);
        //修改
        QueryWrapper<ProductInfo> productInfoQueryWrapper = new QueryWrapper<>();
        productInfoQueryWrapper.lambda().eq(ProductInfo::getCode,productApprovalInfo.getProductInfoCode());
        ProductInfo productInfo = productInfoService.getOne(productInfoQueryWrapper);
        productInfo.setPdInfoReqsStatus(ProductInfo.Status.STATUS_APPROVAL_FAIL);
        productInfoService.updateById(productInfo);
        //保存历史审核信息
        HisProductApprovalInfo hisProductApprovalInfo = new HisProductApprovalInfo();
        BeanUtils.copyProperties(productApprovalInfo,hisProductApprovalInfo);
        QueryWrapper<PdInfoReqsModule> pdInfoReqsModuleQueryWrapper = new QueryWrapper<>();
        pdInfoReqsModuleQueryWrapper.lambda().eq(PdInfoReqsModule::getProductInfoCode,productApprovalInfo.getProductInfoCode());
        List<PdInfoReqsModule> pdInfoReqsModuleList = pdInfoReqsModuleService.list(pdInfoReqsModuleQueryWrapper);
        for(PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModuleList){
            hisProductApprovalInfo.setVersion(pdInfoReqsModule.getVersion());
        }
        hisProductApprovalInfo.setHisProductInfoCode(productInfo.getCode());
        hisProductApprovalInfoService.save(hisProductApprovalInfo);
        //发送消息
        ProductMsg productMsg = new ProductMsg();
        productMsg.setSendTime(new Date());//发送时间
        productMsg.setIsRead(2);//未读
        productMsg.setHandle(2);//未处理
        productMsg.setKind(3);//功能需求信息
        productMsg.setType(3);//审核失败
        String title=productInfo.getName()+"的功能需求信息审核失败了";
        productMsg.setTitle(title);
        String content="您好,你的"+productInfo.getName()+"的功能需求需要审核失败了,请你查看!";
        productMsg.setContent(content);
        productMsg.setHisProductInfoCode(productInfo.getCode());
        productMsgService.save(productMsg);
    }


    /**
     * 将产品功能模块信息
     * 再次审核
     * 审核失败之后,进行信息的修改,之后提交审核
     *
     * @param productInfo 要修改的产品基本信息,包含业务流程信息
     */
    @Override
    public void revise(ProductInfo productInfo) {
        //修改
        QueryWrapper<PdInfoReqsModule> pdInfoReqsModuleQueryWrapper = new QueryWrapper<>();
        pdInfoReqsModuleQueryWrapper.lambda().eq(PdInfoReqsModule::getProductInfoCode,productInfo.getCode());
        List<PdInfoReqsModule> pdInfoReqsModuleList = pdInfoReqsModuleService.list(pdInfoReqsModuleQueryWrapper);
        ArrayList<String> pdInfoReqsModuleCodes = new ArrayList<>();
        for(PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModuleList){
            pdInfoReqsModuleCodes.add(pdInfoReqsModule.getCode());
            QueryWrapper<PdInfoReqs> pdInfoReqsQueryWrapper = new QueryWrapper<>();
            pdInfoReqsQueryWrapper.lambda().eq(PdInfoReqs::getPdInfoReqsModuleCode,pdInfoReqsModule.getCode());
            pdInfoReqsService.remove(pdInfoReqsQueryWrapper);
        }
        pdInfoReqsModuleService.removeByIds(pdInfoReqsModuleCodes);
        List<PdInfoReqsModule> pdInfoReqsModules = productInfo.getPdInfoReqsModules();
        for(PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModules){
            pdInfoReqsModule.setCreateTime(new Date());
            pdInfoReqsModule.setUpdateTime(new Date());
            pdInfoReqsModule.setVersion(pdInfoReqsModule.getVersion()+1);
            pdInfoReqsModule.setIsDelete(2);
            pdInfoReqsModule.setProductInfoCode(productInfo.getCode());
        }
        pdInfoReqsModuleService.saveBatch(pdInfoReqsModules);
        for(PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModules){
            List<PdInfoReqs> pdInfoReqs = pdInfoReqsModule.getPdInfoReqs();
            for(PdInfoReqs pdInfoReqs1: pdInfoReqs){
                pdInfoReqs1.setVersion(pdInfoReqsModule.getVersion()+1);
                pdInfoReqs1.setPdInfoReqsModuleCode(pdInfoReqsModule.getCode());
            }
            pdInfoReqsService.saveBatch(pdInfoReqs);
        }
        productInfo.setPdInfoReqsStatus(ProductInfo.Status.STATUS_WAIT_APPROVAL);
        productInfoService.updateById(productInfo);
        //保存历史功能模块信息
        ArrayList<HisPdInfoReqsModule> hisPdInfoReqsModules = new ArrayList<>();
        for(PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModules){
            HisPdInfoReqsModule hisPdInfoReqsModule = new HisPdInfoReqsModule();
            hisPdInfoReqsModule.setDelete(pdInfoReqsModule.getIsDelete());
            hisPdInfoReqsModule.setHisProductInfoCode(productInfo.getCode());
            hisPdInfoReqsModule.setName(pdInfoReqsModule.getName());
            hisPdInfoReqsModule.setCode(pdInfoReqsModule.getCode());
            hisPdInfoReqsModule.setDes(pdInfoReqsModule.getDes());
            hisPdInfoReqsModule.setVersion(pdInfoReqsModule.getVersion()+1);
            hisPdInfoReqsModule.setCreateTime(pdInfoReqsModule.getCreateTime());
            hisPdInfoReqsModule.setUpdateTime(pdInfoReqsModule.getUpdateTime());
            hisPdInfoReqsModules.add(hisPdInfoReqsModule);
        }
        hisPdInfoReqsModuleService.saveBatch(hisPdInfoReqsModules);
        ArrayList<HisPdInfoReqs> hisPdInfoReqs = new ArrayList<>();
        for(PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModules){
            List<PdInfoReqs> pdInfoReqs = pdInfoReqsModule.getPdInfoReqs();
            for(PdInfoReqs pdInfoReqs1: pdInfoReqs){
                HisPdInfoReqs hisPdInfoReqs1 = new HisPdInfoReqs();
                hisPdInfoReqs1.setName(pdInfoReqs1.getName());
                hisPdInfoReqs1.setDetail(pdInfoReqs1.getDetail());
                hisPdInfoReqs1.setDes(pdInfoReqs1.getDes());
                hisPdInfoReqs1.setCode(pdInfoReqs1.getCode());
                hisPdInfoReqs1.setVersion(pdInfoReqs1.getVersion()+1);
                hisPdInfoReqs1.setHisPdInfoReqsModuleCode(pdInfoReqsModule.getCode());
                hisPdInfoReqs.add(hisPdInfoReqs1);
            }
            hisPdInfoReqsService.saveBatch(hisPdInfoReqs);
        }
        //3:发送消息
        ProductMsg productMsg = new ProductMsg();
        productMsg.setSendTime(new Date());//发送时间
        productMsg.setIsRead(2);//未读
        productMsg.setHandle(2);//未处理
        productMsg.setKind(3);//功能需求信息
        productMsg.setType(1);//待审核
        String title=productInfo.getName()+"的功能需求信息待审核";
        productMsg.setTitle(title);
        String content="领导您好,你有一份"+productInfo.getName()+"的功能需求需要审核,请您审核!";
        productMsg.setContent(content);
        productMsg.setHisProductInfoCode(productInfo.getCode());
        productMsgService.save(productMsg);
    }



    /**
     * 将产品功能模块信息
     * 作废
     *
     * @param code 要作废的信息标识
     */
    @Override
    public void abort(String code) {
        QueryWrapper<ProductInfo> productInfoQueryWrapper = new QueryWrapper<>();
        productInfoQueryWrapper.lambda().eq(ProductInfo::getCode,code);
        ProductInfo productInfo = productInfoService.getOne(productInfoQueryWrapper);
        productInfo.setPdInfoReqsStatus(ProductInfo.Status.STATUS_ABORT);
        productInfoService.updateById(productInfo);
        //3:发送消息
        ProductMsg productMsg = new ProductMsg();
        productMsg.setSendTime(new Date());//发送时间
        productMsg.setIsRead(2);//未读
        productMsg.setHandle(2);//未处理
        productMsg.setKind(3);//功能需求信息
        productMsg.setType(1);//待审核
        String title=productInfo.getName()+"的功能需求信息已经作废";
        productMsg.setTitle(title);
        String content="领导您好,有一份"+productInfo.getName()+"的功能需求需已经作废,请你查看!";
        productMsg.setContent(content);
        productMsg.setHisProductInfoCode(productInfo.getCode());
        productMsgService.save(productMsg);

    }

    /**
     * 产品功能模块信息
     * 查看详情
     *
     * @param code 要查看的标识
     * @return 详情信息
     */
    @Override
    public List<PdInfoReqsModule> detail(String code) {
        QueryWrapper<PdInfoReqsModule> pdInfoReqsModuleQueryWrapper = new QueryWrapper<>();
        pdInfoReqsModuleQueryWrapper.lambda().eq(PdInfoReqsModule::getProductInfoCode,code);
        List<PdInfoReqsModule> pdInfoReqsModuleList = pdInfoReqsModuleService.list(pdInfoReqsModuleQueryWrapper);
        for(PdInfoReqsModule pdInfoReqsModule : pdInfoReqsModuleList){
            String infoReqsModuleCode = pdInfoReqsModule.getCode();
            QueryWrapper<PdInfoReqs> pdInfoReqsQueryWrapper = new QueryWrapper<>();
            pdInfoReqsQueryWrapper.lambda().eq(PdInfoReqs::getPdInfoReqsModuleCode,infoReqsModuleCode);
            List<PdInfoReqs> pdInfoReqsList = pdInfoReqsService.list(pdInfoReqsQueryWrapper);
            pdInfoReqsModule.setPdInfoReqs(pdInfoReqsList);
        }
        return pdInfoReqsModuleList;
    }
}
